An iterable is an object that can be iterated over (it has a Symbol.iterator method). An iterator is an object that performs the iteration (it has a next method). An object can be both if it implements both methods.
An iterable is any object that implements the [Symbol.iterator]() method, which returns an iterator. Examples include Array, String, Map, and Set. An iterator is an object with a next() method that produces values. An object can be both iterable and iterator if it has [Symbol.iterator]() returning this and also a next() method, allowing it to be consumed by for...of while managing its own iteration state.